# Seaborn for easier visualization
import seaborn as sns
import pandas
import numpy as np
import matplotlib.pyplot as plt
import plotly.graph_objects as go
import plotly.express as px
df = pandas.read_csv('data/terrorism_2019.csv', index_col=0)
c:\users\wow80\appdata\local\programs\python\python39\lib\site-packages\IPython\core\interactiveshell.py:3165: DtypeWarning: Columns (4,25,27,39,40,41,46,60,62,70) have mixed types.Specify dtype option on import or set low_memory=False. has_raised = await self.run_ast_nodes(code_ast.body, cell_name,
df.head(5)
| iyear | imonth | iday | approxdate | country | country_txt | region | region_txt | provstate | city | ... | property | propextent | propextent_txt | propvalue | ishostkid | nhostkid | hostkidoutcome | hostkidoutcome_txt | nreleased | related | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| eventid | |||||||||||||||||||||
| 197000000001 | 1970 | 7 | 2 | NaN | 58 | Dominican Republic | 2 | Central America & Caribbean | National | Santo Domingo | ... | 0 | 0 | NaN | 0 | 0 | 0 | 0 | NaN | 0 | 0 |
| 197000000002 | 1970 | 99 | 99 | NaN | 130 | Mexico | 1 | North America | Federal | Mexico city | ... | 0 | 0 | NaN | 0 | 1 | 1 | 0 | NaN | 0 | 0 |
| 197001000001 | 1970 | 1 | 99 | NaN | 160 | Philippines | 5 | Southeast Asia | Tarlac | Unknown | ... | 0 | 0 | NaN | 0 | 0 | 0 | 0 | NaN | 0 | 0 |
| 197001000002 | 1970 | 1 | 99 | NaN | 78 | Greece | 8 | Western Europe | Attica | Athens | ... | 1 | 0 | NaN | 0 | 0 | 0 | 0 | NaN | 0 | 0 |
| 197001000003 | 1970 | 1 | 99 | NaN | 101 | Japan | 4 | East Asia | Fukouka | Fukouka | ... | 1 | 0 | NaN | 0 | 0 | 0 | 0 | NaN | 0 | 0 |
5 rows × 76 columns
# Entrada del nombre del país requerido
nombreDelPais = input()
# Crear un nuevo DataSet con paises y ciudades agrupados
# Selección múltiple de filas o columnas mediante posición con iloc
dfPaisesCiudades = df.iloc[:,[5, 9]]
# Guardamos la condición
is_country = dfPaisesCiudades.loc[:, 'country_txt'] == nombreDelPais
# Filtramos el pais del df
dfPaisFiltrado = dfPaisesCiudades.loc[is_country]
agrupadoPaises = dfPaisesCiudades.groupby(['country_txt', 'city'])
# print(agrupadoPaises)
agrupadoPaises.first()
# for i in agrupadoPaises:
# print(i)
#if (i['country_txt'] == nombreDelPais):
# print(i)
# Aquí podemos utilizar un list para convertir a lista todos los valores únicos de las columnas elegidas
#print(list(df['country_txt'].unique()))
#print(list(df['city'].unique()))
#print(list(df['weaptype1_txt'].unique()))
Afghanistan
| country_txt | city |
|---|---|
| Afghanistan | Aab Frosha |
| Aab Kalan | |
| Aab Kamra | |
| Aab Pashak | |
| Aab-e-Kalan | |
| ... | ... |
| Zimbabwe | Somabhula |
| Trenance | |
| Unknown | |
| Victoria Falls | |
| Zaka District |
43963 rows × 0 columns
# Mediante histogramas podemos analizar cada una de las columnas
df.hist(figsize=(50,50), xrot=-45, grid=True)
plt.show()
# Impresión de las armas registradas en el dataset y la cantidad de veces que fueron utilizadas como arma principal
print(df['weaptype1_txt'].value_counts(sort=False)) # Tabla de frecuencias de la variable 'smoker'
Firearms 64923 Vehicle (not to include vehicle-borne explosives, i.e., car or truck bombs) 170 Fake Weapons 33 Sabotage Equipment 175 Melee 4115 Unknown 18462 Other 134 Chemical 344 Biological 36 Incendiary 12445 Explosives 100333 Radiological 13 Name: weaptype1_txt, dtype: int64
# Agrupamos por año
dfAgrupadoAgno = df.groupby('iyear').mean()
#
dfAgrupadoAgno.head()
# for i in dfAgrupadoAgno:
# print(i)
| imonth | iday | country | region | crit1 | crit2 | crit3 | doubtterr | alternative | multiple | ... | weapsubtype4 | nkill | nkillter | nwound | property | propextent | ishostkid | nhostkid | hostkidoutcome | nreleased | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| iyear | |||||||||||||||||||||
| 1970 | 6.155146 | 17.158218 | 214.846390 | 2.423963 | 0.998464 | 1.000000 | 0.963134 | 0.310292 | 0.339478 | 0.136713 | ... | 0.0 | 0.267281 | 0.023041 | 0.325653 | 0.233487 | 1.963134 | 0.079877 | 1.465438 | 0.136713 | 0.990783 |
| 1971 | 5.910828 | 17.254777 | 272.804671 | 4.229299 | 1.000000 | 0.995754 | 0.866242 | 0.428875 | 0.259023 | 0.057325 | ... | 0.0 | 0.367304 | 0.008493 | 0.174098 | 0.369427 | 1.770701 | 0.057325 | 0.127389 | 0.080679 | 0.095541 |
| 1972 | 7.102113 | 18.176056 | 387.619718 | 6.955986 | 1.000000 | 0.984155 | 0.762324 | 0.380282 | 0.288732 | 0.161972 | ... | 0.0 | 0.996479 | 0.031690 | 0.720070 | 0.357394 | 0.697183 | 0.051056 | 0.531690 | 0.137324 | 0.531690 |
| 1973 | 6.596195 | 17.190275 | 322.634249 | 6.181818 | 1.000000 | 0.972516 | 0.826638 | 0.475687 | 0.253700 | 0.031712 | ... | 0.0 | 0.782241 | 0.044397 | 1.046512 | 0.395349 | 0.716702 | 0.186047 | 0.767442 | 0.272727 | 0.380550 |
| 1974 | 6.965577 | 16.800344 | 300.022375 | 5.993115 | 0.998279 | 0.986231 | 0.912220 | 0.354561 | 0.177281 | 0.060241 | ... | 0.0 | 0.927711 | 0.037866 | 1.488812 | 0.531842 | 0.969019 | 0.227194 | 0.476764 | 0.182444 | 0.098107 |
5 rows × 38 columns
# Gráfica para poder observar la cantidad de ataques que se han registrado con el pasar de los años en 50 años
df['iyear'].plot.hist(figsize=(10,12))
<AxesSubplot:ylabel='Frequency'>
En esta gráfica podemos observar como la cantidad de ataques terroristas se incrementaron en gran medida las últimas 5 décadas.
counts, bins = np.histogram(df['nkill'], bins = range(-1,9,2))
plt.plot(bins[:-1]+1, counts)
[<matplotlib.lines.Line2D at 0x2e50f0a93a0>]
#Countrywise order of top 25 Hot Zones Across the world.
fig=plt.figure(figsize=(20,12))
sns.barplot(x= df['country_txt'].value_counts()[0:25].values, y=df['country_txt'].value_counts()[0:25].index,palette='hot')
plt.title("Zonas mas afectadas",size=18)
plt.xlabel("No. de Ataques ",size=12)
plt.ylabel("País",size=12)
plt.show()
En esta gráfica analizamos los paises los cuales han tenido la mayor cantidad de ataques terroristas en todos los 50 años de registro. Y como podemos apreciar, el país de Iraq es el más afectado por ataques terroristas, después de este viene Afghanistán y Pakistán.
data = df.groupby("region_txt")['region_txt'].value_counts()
fig=plt.figure(figsize=(18,10))
labels = data.keys()
plt.pie(x=data, autopct="%.1f%%",explode=[0.05]*12, labels=labels, pctdistance=0.5)
plt.title("Porcentaje de Ataques terroristas en las regiones", fontsize=14);
Como se puede constatar con la gráfica de mayor cantidad de ataques terroristas por páis, la región con mayor incidencia de ataques es el sur de Asia, norte de África y el Este Medio.
sns.countplot(y='success', data=df)
# 1 = Ataque exitoso
<AxesSubplot:xlabel='count', ylabel='success'>
La mayoría de veces, los ataques terroristas son exitosos.
fig=plt.figure(figsize=(20,10))
sns.barplot(x = df['gname'].value_counts()[1:11].values,y = df['gname'].value_counts()[1:11].index,palette='magma')
plt.yticks(size=15)
plt.xlabel("No. de ataques",size=12)
plt.ylabel("Grupo terrorista",size=12)
plt.title("Organizaciones terroristas más activas",size=20)
plt.show()
Esta gráfica nos muestra los grupos terroristas que representan una enorme amenaza por su gran actividad terrorista con ataques alrededor del mundo, en el primer puesto tenemos al grupo Talibán, el cual tiene a su cargo una enorme cantidad de ataques adjudicados, después está el grupo ISIS y en tercer puesto el grupo Sendero Luminoso (SL).
d = df[['targtype1_txt','iyear']].groupby(['targtype1_txt','iyear']).size()
new_df = d.to_frame(name='size').reset_index()
fig=plt.figure(figsize=(20,8))
for i in df['targtype1_txt'].value_counts()[:6].index:
plt.plot(new_df['iyear'][new_df['targtype1_txt']==i],new_df['size'][new_df['targtype1_txt']==i])
plt.legend(labels= df['targtype1_txt'].value_counts()[0:6].index)
plt.xlabel('Años',size=15)
plt.ylabel('Número de ataques',size=15)
plt.title('Principales objetivos de las organizaciones terroristas a lo largo de los años',size=20)
plt.show()
fig.savefig('Principales objetivos de las organizaciones terroristas a lo largo de los años',bbox_inches='tight')
fig,axes=plt.subplots(figsize=(20,8),nrows=1,ncols=2)
plt.yticks(size=12)
plt.xticks(size=12)
sns.barplot(x = df['attacktype1_txt'].value_counts().values, y= df['attacktype1_txt'].value_counts().index,ax=axes[0],palette='hot')
axes[0].set_title("Tipos de ataques",size=18)
sns.barplot(y= df['weaptype1_txt'].value_counts()[:5].values, x= df['weaptype1_txt'].value_counts()[:5].index,ax=axes[1],palette='magma')
axes[1].set_title("Tipo de armas utilizada",size=18)
plt.tight_layout()
plt.show()
Los tipos de ataque que más frecuentan los grupos terroristas para efectuar sus ataques son los ataques explosivos, de estos son los que más son llevados a cabo y por lo tanto la mayor cantidad de tipos de armas que se usan son explosivas. Pero en la siguiente gráfica vamos a ver cual es la gráfica que más muertes provoca, es decir la más mortífera en un ataque.
dw = df.groupby(['weaptype1_txt','weaptype1_txt'])[['nkill']].max()
a = ['Biological', 'Chemical', 'Explosives', 'Fake Weapons', 'Firearms', 'Incendiary', 'Melee', 'Other', 'Radiological', 'Sabotage Equipment' ,'Unknown' ,'Vehicles']
b = list(dw['nkill'].unique())
fig = px.bar(
data_frame=dw,
x=a, y=b, text=b, labels={'y':'Cantidad de muertos en un solo ataque', 'x': 'Tipo de Arma'},
title='Tipos de Armas más mortíferas utilizadas'
)
fig
c = df.copy()
c = c[c['country_txt'] == 'India']
c = c[c['weaptype1_txt'] == 'Explosives']
c = c[c['doubtterr'] == 0]
c = c[c['iyear'] >= 2010]
p5 = c['city']
t5 = c['nkill']
g5 = px.treemap(c, labels=p5, values=t5, path=['city'])
g5.show()
Como ya se pudo ver, el país con una gran cantidad de ataques que causó gran impresión es la India, y aquí podemos ver la enorme cantidad de ataques en sus diferentes ciudades de las cuales ha sido víctima, y más concretamente vamos a ver las ciudades con más ataques de la India.
c = df.copy()
c = c[c['country_txt'] == 'India']
c = c[c['weaptype1_txt'] == 'Explosives']
c = c[c['doubtterr'] == 0]
c = c[c['iyear'] >= 2010]
c1 = c.sort_values('city')
c1 = c1[:200]
p5 = c1['city']
t5 = c1['nkill']
g5 = px.treemap(c1, labels=p5, values=t5, path=['city'])
g5.show()
c = df.copy()
c = c[c['country_txt'] == 'Mexico']
c = c[c['weaptype1_txt'] == 'Explosives']
#c = c[c['doubtterr'] == 1]
#c = c[c['iyear'] >= 2010]
p5 = c['city']
t5 = c['nkill']
g5 = px.treemap(c, labels=p5, values=t5, path=['city'])
g5.show()
Número de muertes en Estados unidos, debido a armas explosivas en todas sus ciudades
c = df.copy()
c = c[c['country_txt'] == 'United States']
c = c[c['weaptype1_txt'] == 'Explosives']
c = c[c['doubtterr'] == 0]
c = c[c['iyear'] >= 2010]
p5 = c['city']
t5 = c['nkill']
g5 = px.treemap(c, labels=p5, values=t5, path=['city'])
g5.show()
En esta gráfica podemos apreciar las ciudad de Estados Unidos en las cuales se han usado explosivos en ataques terroristas.
a = df.copy()
a = a[a['country_txt'] == 'Afghanistan']
# a = a[a['weaptype1_txt'] == 'Explosives']
a = a[a['doubtterr'] == 0]
a = a[a['iyear'] >= 2000]
a = a.groupby(['weaptype1_txt'])[['nkill']].sum()
l = ['Explosives','Explosives', 'Firearms', 'Incendiary','Unknown', 'Melee', 'Sabotage Equipment', 'Chemical', 'Other'] #'Vehicle (not include vehicle-borne explosives, i.e., car or truck bombs)']
fig = px.bar(
data_frame=a,
x=l,#'weaptype1_txt',
y='nkill',
labels={'x':'Tipo de arma', 'y':'Número de muertes'}
)
fig.show()
df_2 = df[df['country_txt'] == 'India']
df_2_2 = df_2.iloc[:, [2, 45, 46, 64, 71]]
df_2_2=df_2_2.rename(columns={'iday':'Día'})
df_2_2=df_2_2.rename(columns={'weaptype1':'Tipo de arma'})
df_2_2=df_2_2.rename(columns={'nkillter':'Bajas Terroristas'})
df_2_2=df_2_2.rename(columns={'nhostkid':'Secuestrados'})
plt.rcParams['figure.figsize'] = (15.0, 10.0) # dimensión
sns.heatmap(df_2_2.corr(), annot=True) # annot_True para presentar el coeficiente de correlación
<AxesSubplot:>
df_3 = df[df['country_txt'] == 'India']
df_3_3 = df_3.iloc[:, [2, 20, 45, 46, 63, 64, 71, 74]]
df_3_3=df_3_3.rename(columns={'iday':'Día'})
df_3_3=df_3_3.rename(columns={'weaptype1':'Tipo de arma'})
df_3_3=df_3_3.rename(columns={'nkillter':'Bajas Terroristas'})
df_3_3=df_3_3.rename(columns={'nhostkid':'Secuestrados'})
df_3_3=df_3_3.rename(columns={'nkill':'Bajas de víctimas'})
df_3_3=df_3_3.rename(columns={'nreleased':'Liberados'})
df_3_3=df_3_3.rename(columns={'suicide':'Suicidos del perpetrador'})
plt.rcParams['figure.figsize'] = (15.0, 12.0)
sns.heatmap(df_3_3.corr(), annot = True) # decimales
<AxesSubplot:>
disp= df.plot(kind='scatter', x='weaptype1_txt', y='nkill')
df_2 = df[df['country_txt'] == 'Iraq']
df_2_2 = df_2.iloc[:, [2, 45, 46, 64, 71]]
df_2_2=df_2_2.rename(columns={'iday':'Día'})
df_2_2=df_2_2.rename(columns={'weaptype1':'Tipo de arma'})
df_2_2=df_2_2.rename(columns={'nkillter':'Bajas Terroristas'})
df_2_2=df_2_2.rename(columns={'nhostkid':'Secuestrados'})
plt.rcParams['figure.figsize'] = (15.0, 10.0) # dimensión
sns.heatmap(df_2_2.corr(), annot=True) # annot_True para presentar el coeficiente de correlación
<AxesSubplot:>
df_3 = df[df['country_txt'] == 'Iraq']
df_3_3 = df_3.iloc[:, [2, 20, 45, 46, 63, 64, 71, 74]]
df_3_3=df_3_3.rename(columns={'iday':'Día'})
df_3_3=df_3_3.rename(columns={'weaptype1':'Tipo de arma'})
df_3_3=df_3_3.rename(columns={'nkillter':'Bajas Terroristas'})
df_3_3=df_3_3.rename(columns={'nhostkid':'Secuestrados'})
df_3_3=df_3_3.rename(columns={'nkill':'Bajas de víctimas'})
df_3_3=df_3_3.rename(columns={'nreleased':'Liberados'})
df_3_3=df_3_3.rename(columns={'suicide':'Suicidos del perpetrador'})
plt.rcParams['figure.figsize'] = (15.0, 12.0)
sns.heatmap(df_3_3.corr(), annot = True) # decimales
<AxesSubplot:>